package com.persistence.core;

import java.util.Collection;
import java.util.List;

/**
 * Ejemplo: call storedProcedure( param1, param2 )
 *
 * @author Alejandro Sanchez
 *
 */
public interface MyStoredProcedure {

	public List getValues();

	public String getProcedure();

	/**
	 * Setea el nombre de la funcion a llamar
	 * @param table
	 * @return MyStoredProcedure
	 */
	public MyStoredProcedure setProcedure( String procedure );

	/**
	 * Agrega un parametro al procedimiento
	 *
	 * @param column
	 * @param value
	 * @return MyStoredProcedure
	 */
	public MyStoredProcedure addValue( Object value );

	/**
	 * Agrega un parametro del tipo coleccion al procedimiento
	 * @param collection
	 * @return
	 */
	public MyStoredProcedure addCollection( String collectionType, Collection collection );

	/**
	 * Agrega un parametro del tipo array al procedimiento
	 * @param collection
	 * @return
	 */
	public MyStoredProcedure addArray( String collectionType, Object[] array );

	/**
	 * Agrega un parametro Custom Type al procedimiento
	 * @param collection
	 * @return
	 */
	public MyStoredProcedure addCustomType( MyCustomType customType ) ;

	/**
	 * Agrega una lista de parametros Custom Type al procedimiento
	 * @param mapper
	 * @return
	 */
	public MyStoredProcedure addCustomTypeList( String collectionType, String objectType, Collection collection, MyCustomTypeMapper mapper ) ;
}
